--- %%NOBANNER%% -->
![]() | ![]() |
/*-------------------<-- Start of Description-->---------------------\ | Update the contents of an oldbmark with either a variable from a | | data set or a 'text', then update the oldbmark name to newbmark | | name; Or just to create a bookmark; | |---------------------<-- End of Description-->----------------------| |--------------------------------------------------------------------| |------------<-- Start of Files or Arguments Needed-->---------------| | Argument: | | oldbmark: the name of the bookmark you want to update; | | newbmark: the name of the bookmark after you updated it; | | var: the name of the variable you want to use to update the | | bookmark; | | format: the format for the value of variable you want to update | | the bookmark; | | color: the color of the text; | | indata: the name of the dataset you want to use; | | wordref: word reference; not necessary default is "wordsys"; | | Note: | | if oldbmark not equal empty, then | | go to the oldbmark; | | if newbmark is given, then update the oldbmark name to the | | name; new one; else (new book mark isn't given), keep the | | oldbmark; | | else (oldbmark is empty), if a new bookmark is given then create a | | new bookmark; | | if there is a data set then update the contents of the oldbmark to | | the variable value in the data set; | | else if the data set is empty thenupdate the contents of the | | oldbmark to the text input by var; | | Color: what color do you want the text be displayed; | | By default, it will keep the current color; | |------------<-- Start of Files or Arguments Needed-->---------------| |--------------------------------------------------------------------| |------------------<-- Start of Files Created-->---------------------| | Example: %bmark('b1',data1,x,format=5.0,path='c:\temp.doc'); | | Usage: %bmark(bookmark, data, var, format=, path=); | \-------------------<-- End of Files Created-->---------------------*/ %macro bmark(bookmark, data, var, format=, path=&__lastpath); %global __lastpath; %if (%quote(&path) ne) %then %do; %let __lastpath=%trim(%left(%sysfunc(dequote(&path)))); %end; %else %if (%quote(&path) eq) and (%quote(&__lastpath) eq) %then %do; %put ==> Alert! You must provide a valid file path in order to update a bookmark.; %goto finish; %end; %let bookmark=%trim(%left(%sysfunc(dequote(&bookmark)))); %let __varnum=0; %let __vartype=; %let __dsid=0; %let __varnumstr=0; %if (%quote(&data) ne) %then %do; %if (%sysfunc(exist(&data))) %then %do; %let __dsid=%sysfunc(open(&data)); %let __varnumstr=%sysfunc(VARNUM(&__dsid,__str)); %let __varnum=%sysfunc(VARNUM(&__dsid,&var)); %let __vartype=%sysfunc(VARTYPE(&__dsid, &__varnum)); %let __rc=%sysfunc(close(&__dsid)); %end; %end; %if (&__varnum) or (%index(%nrbquote(&var), %nrbquote(%sysfunc(dequote(%quote(&var))))) > 1) %then %do; %if (%sysfunc(fileexist(&__lastpath))) %then %do; Filename __path dde "Winword|%trim(%left(%sysfunc(dequote(&__lastpath))))!&bookmark" notab lrecl=1048576; data _null_; file __path; %if (%quote(&format) ne) and (%quote(%upcase(&__vartype)) eq %quote(C)) %then %do; format &var &format; %end; %if (%sysfunc(exist(&data))) %then %do; set &data %if (&__varnumstr) %then %do; (drop=__str) %end;; %end; %if (%quote(%upcase(&__vartype)) eq %quote(N)) and (%quote(&format) ne) %then %do; __str=trimn(left(put(&var, &format))); %end; %else %if (%quote(%upcase(&__vartype)) eq %quote(N)) and (%quote(&format) eq) %then %do; __str=trimn(left(put(&var, best12.))); %end; %else %if (%quote(%upcase(&__vartype)) eq %quote(C)) %then %do; __str=trimn(left(&var)); %end; %else %if (%index(%nrbquote(&var), %nrbquote(%sysfunc(dequote(%quote(&var))))) > 1) %then %do; __str=trim(left(&var)); %end; put __str; run; %end; %else %do; %put ==> Alert! File path is not valid.; %goto finish; %end; %end; %else %put ==> Alert! Dataset &data does not have variable named "&var"!; %finish: %mend bmark;